package main

//
//import (
//	"context"
//	"errors"
//	"flag"
//	"github.com/gin-gonic/gin"
//	"github.com/spf13/afero"
//	acl2 "gitlab.local/DO-module/acl-module/src/service/acl"
//	"gitlab.local/DO-module/new-filemanage-module/server"
//	"gitlab.local/DO-module/new-filemanage-module/server/auth"
//	"gitlab.local/DO-module/new-filemanage-module/src/core/directory"
//	"gitlab.local/DO-module/new-filemanage-module/src/core/fileoperate"
//	"gitlab.local/DO-module/new-filemanage-module/src/core/httpclient"
//	"gitlab.local/DO-module/new-filemanage-module/src/core/middleware"
//	"gitlab.local/DO-module/new-filemanage-module/src/core/network"
//	"gitlab.local/DO-module/new-filemanage-module/src/core/nginx"
//	"gitlab.local/DO-module/new-filemanage-module/src/core/redisdb"
//	"gitlab.local/DO-module/new-filemanage-module/src/core/servicectl"
//	"gitlab.local/DO-module/new-filemanage-module/src/core/tnasonline"
//	"gitlab.local/DO-module/new-filemanage-module/src/service/filesystem"
//	"gitlab.local/DO-module/new-filemanage-module/src/service/folder"
//	"gitlab.local/DO-module/new-filemanage-module/src/service/sharefolder"
//	"gitlab.local/DO-module/new-filemanage-module/src/service/taskhook"
//	"gitlab.local/DO-module/new-filemanage-module/src/service/user"
//	"gitlab.local/golibrary/sysconfig"
//
//	"gitlab.local/DO-module/new-filemanage-module/src/core/sqlitedb"
//	"gitlab.local/rkonfj/internalstd/logger/slog"
//	"log"
//	"net/http"
//	"os"
//	"os/signal"
//	"syscall"
//)
//
//// options 应用可选配置
//type options struct {
//	syslog               bool   // 使用 syslog
//	loglevel             int    // slog 日志级别
//	sock                 string // ipc socket 文件路径
//	rpcAuthAnonymous     bool   // RPC 认证启用匿名认证
//	rpcAuthRedisAddr     string // RPC 认证使用的 redis 地址
//	rpcAuthRedisDB       int    // RPC 认证使用的 redis 数据库编号
//	rpcAuthRedisPassword string // RPC 认证使用的 redis 密码
//}
//
//// processProgramOptions 处理应用可选参数
//func processProgramOptions() (opts options) {
//	flag.BoolVar(&opts.syslog, "syslog", false, "send logs to syslogd over /dev/log")
//	flag.StringVar(&opts.sock, "sock", "/run/file-manage.sock", "listening IPC socket path")
//	flag.BoolVar(&opts.rpcAuthAnonymous, "rpc-auth-anonymous", false, "allow any anonymous access")
//	flag.StringVar(&opts.rpcAuthRedisAddr, "rpc-auth-redis-addr", "127.0.0.1:6379", "redis address for RPC authenticate")
//	flag.Parse()
//	return
//}
//
//func main() {
//	opts := processProgramOptions()
//
//	logger := slog.NewLogger(opts.syslog, opts.loglevel)
//
//	authenticator := auth.NewRedisAuthenticator(
//		opts.rpcAuthRedisAddr, opts.rpcAuthRedisPassword, opts.rpcAuthRedisDB, logger)
//
//	authOpt := server.WithAuthenticator(&auth.AnonymousAuthenticator{})
//	if !opts.rpcAuthAnonymous {
//		authOpt = server.WithAuthenticator(authenticator)
//	}
//	gin.SetMode(gin.ReleaseMode)
//	engine := gin.New()
//	databaseObj, err := sqlitedb.New()
//	if err != nil {
//		log.Fatalln(err)
//	}
//	redisDB, err := redisdb.New()
//	if err != nil {
//		log.Fatalln(err)
//	}
//	// nginx
//	nginxHandle := nginx.New()
//	// global system config
//	sysConfig := sysconfig.New()
//	// os file system
//	nos := afero.NewOsFs()
//
//	networkHandle := network.New(sysConfig)
//	aclHandle := acl2.NewServiceAcl(databaseObj)
//
//	srv := server.New(logger, engine, server.WithIPCSock(opts.sock), authOpt)
//
//	dir := directory.New(databaseObj)
//
//	serviceHandle := servicectl.New(nos)
//
//	hookService := taskhook.New(sysConfig)
//
//	middlewareHandle := middleware.New(databaseObj, nos, redisDB, hookService, aclHandle)
//
//	//用户
//	personObj := user.New(databaseObj, sysConfig, dir, aclHandle)
//	//分享
//	fOptHandle := fileoperate.New(databaseObj, aclHandle, personObj, nos)
//
//	httpClient := httpclient.New(networkHandle, nginxHandle)
//
//	serviceCtl := servicectl.New(nos)
//
//	tnasOnline := tnasonline.New(sysConfig, nos, serviceCtl, httpClient)
//
//	//目录文件夹
//	folderObj := folder.NewFolder(databaseObj, fOptHandle, aclHandle)
//	//文件系统
//	fs := filesystem.GetInstance(databaseObj, tnasOnline, fOptHandle, aclHandle, nginxHandle, networkHandle, middlewareHandle)
//	//共享文件夹
//	//authOpt = server.WithFileSystem(fs)
//	shareFolderObj := sharefolder.New(dir, personObj, aclHandle, databaseObj, serviceHandle, fOptHandle, folderObj)
//	srv.CreateRouter(engine, middlewareHandle, databaseObj, fOptHandle, aclHandle, fs, folderObj, shareFolderObj)
//	sigs := make(chan os.Signal, 1)
//	defer close(sigs)
//	signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
//	go func() {
//		<-sigs
//		logger.Info("Graceful shutdown")
//		srv.Shutdown(context.Background())
//	}()
//
//	err = srv.Run()
//	if !errors.Is(err, http.ErrServerClosed) {
//		logger.Error(err.Error())
//	}
//}
